SPDX-FileCopyrightText: 2016 Michaël Vignano SPDX-FileCopyrightText: 2024 AlICe laboratory https://alicelab.be
SPDX-License-Identifier: GPL-3.0-or-later
import bpy
import random
from random import *
import math
from math import *
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete(use_global=False)Import des différentes pyramides
def CopyPaste(name, newname):
    bpy.context.scene.objects.active = bpy.data.objects[name]
    obj = bpy.context.active_object
    Copy = bpy.data.objects.new(newname, obj.data)
    bpy.context.scene.objects.link(Copy)
    return Copy
pyramideun = CopyPaste("pyramide1", "NewName")
pyramidedeux = CopyPaste("pyramide2", "NewName2")
pyramidetrois = CopyPaste("pyramide3", "NewName3")
pyramidequatre = CopyPaste("pyramide4", "NewName4")agregation des pyramides avec la pyramideun au centre
def agregation1(position):
    x, y, z = position
    pyramideun.location = [0, 0, 0]
    pyramideun.scale = [10, 10, 40]
    pyramideun.rotation_euler = [radians(0), radians(0), radians(0)]
    l_agregation12 = [
        (-288, +60, 0),
        (-72, +276, 0),
        (-288, -84, 0),
        (-300, -72, 0),
        (+288, +60, 0),
        (+72, +276, 0),
        (+288, -84, 0),
        (+72, -300, 0),
    ]
    l_agregation41 = [
        (-72, +420, 0),
        (-432, +600, 0),
        (-432, -84, 0),
        (-72, -444, 0),
        (+72, -444, 0),
        (+432, -84, 0),
        (+432, +60, 0),
        (+72, +420, 0),
    ]
    l_agregation31 = [
        (+72, +348, 0),
        (+360, +60, 0),
        (+360, -84, 0),
        (+72, -372, 0),
        (-72, -372, 0),
        (+360, -84, 0),
        (-360, +60, 0),
        (-72, +348, 0),
    ]
    pospyramide2 = (0, 0, 0)
    for i in range(0, 5):
        pyramidedeux.location = pospyramide2
        pyramidedeux.scale = [10, 10, 60]
        pospyramide2 = choice(l_agregation12)
        l_agregation12.remove(pospyramide2)
        print(l_agregation12)
    pospyramide3 = (0, 0, 0)
    for i in range(0, 5):
        pyramidetrois.location = pospyramide3
        pyramidetrois.scale = [10, 10, 60]
        pospyramide3 = choice(l_agregation31)
        l_agregation31.remove(pospyramide3)
        print(l_agregation31)
    pospyramide4 = (0, 0, 0)
    for i in range(0, 5):
        pyramidequatre.location = pospyramide4
        pyramidequatre.scale = [10, 10, 80]
        pospyramide4 = choice(l_agregation41)
        l_agregation41.remove(pospyramide4)
        print(l_agregation41)agregation1 ((0,0,0))
agregation des pyramides avec la pyramidedeux au centre
def agregation2(position):
    x, y, z = position
    pyramidedeux.location = [0, 0, 0]
    pyramidedeux.scale = [10, 10, 60]
    pyramidedeux.rotation_euler = [radians(0), radians(0), radians(0)]
    l_agregation12 = [
        (-288, +60, 0),
        (-72, +276, 0),
        (-288, -84, 0),
        (-300, -72, 0),
        (+288, +60, 0),
        (+72, +276, 0),
        (+288, -84, 0),
        (+72, -300, 0),
    ]
    l_agregation42 = [
        (+72, +504, 0),
        (+72, -504, 0),
        (-72, +504, 0),
        (-72, -504, 0),
        (+504, +72, 0),
        (+504, -72, 0),
        (-504, +72, 0),
        (-504, -72, 0),
        (-144, +432, 0),
        (-216, +360, 0),
        (-288, +288, 0),
        (-360, +216, 0),
        (-432, +144, 0),
        (+144, -432, 0),
        (+216, -360, 0),
        (+288, -288, 0),
        (+360, -216, 0),
        (+432, -144, 0),
    ]
    l_agregation32 = [
        (-72, -432, 0),
        (-432, -722, 0),
        (-432, +72, 0),
        (-72, +432, 0),
        (+72, +432, 0),
        (+432, +72, 0),
        (+432, -72, 0),
        (+72, -432, 0),
    ]
    pospyramide = (0, 0, 0)
    for i in range(0, 2):
        pyramideun.location = pospyramide
        pyramideun.scale = [10, 10, 40]
        pospyramide = choice(l_agregation12)
        l_agregation12.remove(pospyramide)
        print(l_agregation12)
    pospyramide3 = (0, 0, 0)
    for i in range(0, 5):
        pyramidetrois.location = pospyramide3
        pyramidetrois.scale = [10, 10, 60]
        pospyramide3 = choice(l_agregation32)
        l_agregation32.remove(pospyramide3)
        print(l_agregation32)
    pospyramide4 = (0, 0, 0)
    for i in range(0, 5):
        pyramidequatre.location = pospyramide4
        pyramidequatre.scale = [10, 10, 80]
        pospyramide4 = choice(l_agregation42)
        l_agregation42.remove(pospyramide4)
        print(l_agregation42)agregation2((0,0,0))
agregation des pyramides avec la pyramidetrois au centre
def agregation3(position):
    x, y, z = position
    pyramidetrois.location = [0, 0, 0]
    pyramidetrois.scale = [10, 10, 80]
    pyramidetrois.rotation_euler = [radians(0), radians(0), radians(0)]
    l_agregation43 = [
        (+72, +576, 0),
        (+576, +72, 0),
        (+576, -72, 0),
        (+72, -576, 0),
        (-72, -576, 0),
        (-576, -72, 0),
        (-576, +72, 0),
        (-72, +576, 0),
        (-504, -144, 0),
        (-432, -216, 0),
        (-360, -288, 0),
        (-288, -360, 0),
        (+504, +144, 0),
        (+432, +216, 0),
        (+360, +288, 0),
        (+288, +360, 0),
    ]
    l_agregation32 = [
        (-72, -432, 0),
        (-432, -722, 0),
        (-432, +72, 0),
        (-72, +432, 0),
        (+72, +432, 0),
        (+432, +72, 0),
        (+432, -72, 0),
        (+72, -432, 0),
    ]
    l_agregation31 = [
        (+72, +348, 0),
        (+360, +60, 0),
        (+360, -84, 0),
        (+72, -372, 0),
        (-72, -372, 0),
        (+360, -84, 0),
        (-360, +60, 0),
        (-72, +348, 0),
    ]
    pospyramide = (0, 0, 0)
    for i in range(0, 5):
        pyramideun.location = pospyramide
        pyramideun.scale = [10, 10, 40]
        pospyramide = choice(l_agregation31)
        l_agregation31.remove(pospyramide)
        print(l_agregation31)
    pospyramide2 = (0, 0, 0)
    for i in range(0, 5):
        pyramidedeux.location = pospyramide2
        pyramidedeux.scale = [10, 10, 60]
        pospyramide2 = choice(l_agregation32)
        l_agregation32.remove(pospyramide2)
        print(l_agregation32)
    pospyramide4 = (0, 0, 0)
    for i in range(0, 5):
        pyramidequatre.location = pospyramide4
        pyramidequatre.scale = [10, 10, 80]
        pospyramide4 = choice(l_agregation43)
        l_agregation43.remove(pospyramide4)
        print(l_agregation43)agregation3 ((0,0,0))
agregation des pyramides avec la pyramidequatre au centre
pospyramide4 = (0,0,0)
def agregation4(position):
    x, y, z = position
    pyramidequatre.location = [0, 0, 0]
    pyramidequatre.scale = [10, 10, 100]
    pyramidequatre.rotation_euler = [radians(0), radians(0), radians(0)]
    l_agregation41 = [
        (-72, +420, 0),
        (-432, +600, 0),
        (-432, -84, 0),
        (-72, -444, 0),
        (+72, -444, 0),
        (+432, -84, 0),
        (+432, +60, 0),
        (+72, +420, 0),
    ]
    l_agregation42 = [
        (+72, +504, 0),
        (+72, -504, 0),
        (-72, +504, 0),
        (-72, -504, 0),
        (+504, +72, 0),
        (+504, -72, 0),
        (-504, +72, 0),
        (-504, -72, 0),
        (-144, +432, 0),
        (-216, +360, 0),
        (-288, +288, 0),
        (-360, +216, 0),
        (-432, +144, 0),
        (+144, -432, 0),
        (+216, -360, 0),
        (+288, -288, 0),
        (+360, -216, 0),
        (+432, -144, 0),
    ]
    l_agregation43 = [
        (+72, +576, 0),
        (+576, +72, 0),
        (+576, -72, 0),
        (+72, -576, 0),
        (-72, -576, 0),
        (-576, -72, 0),
        (-576, +72, 0),
        (-72, +576, 0),
        (-504, -144, 0),
        (-432, -216, 0),
        (-360, -288, 0),
        (-288, -360, 0),
        (+504, +144, 0),
        (+432, +216, 0),
        (+360, +288, 0),
        (+288, +360, 0),
    ]
    pospyramide = (0, 0, 0)
    for i in range(0, 5):
        pyramideun.location = pospyramide
        pyramideun.scale = [10, 10, 40]
        pospyramide = choice(l_agregation41)
        l_agregation41.remove(pospyramide)
        print(l_agregation41)
    pospyramide2 = (0, 0, 0)
    for i in range(0, 5):
        pyramidedeux.location = pospyramide2
        pyramidedeux.scale = [10, 10, 60]
        pospyramide2 = choice(l_agregation42)
        l_agregation42.remove(pospyramide2)
        print(l_agregation42)
    pospyramide3 = (0, 0, 0)
    for i in range(0, 5):
        pyramidetrois.location = pospyramide3
        pyramidetrois.scale = [10, 10, 60]
        pospyramide3 = choice(l_agregation43)
        l_agregation43.remove(pospyramide3)
        print(l_agregation43)for i in range (0,5): pyramidequatre.location = (pospyramide4) pyramidequatre.scale = [10,10,80]
pospyramide4 = choice (l_agregation43)
l_agregation43.remove(pospyramide4)
            print (l_agregation43)"""
#DIVIDER
#DIVIDER
#DIVIDER
def random(position):
    x, y, z = position
    l_pyramide = [agregation1, agregation2, agregation3, agregation4]
    geo = choice(l_pyramide)
    if geo == agregation1:
        agregation1((0, 0, 0))
    if geo == agregation2:
        agregation2((0, 0, 0))
    if geo == agregation3:
        agregation3((0, 0, 0))
    if geo == agregation4:
        agregation4((0, 0, 0))
random((0, 0, 0))
"""
    l_agregation11 = [(x+144,y+144,z),(x-144,y-144,z),(x+144,y-144,z),(x-144,y+144,z),(x+216,y+72,z),(x+216,y-72,z),(x-216,y+72,z),(x-216,y-72,z),(x+72,y+216,z),(x+72,y-216,z),(x-72,y+216,z),(x-72,y-216,z)]
    l_agregation12 = [(x-288,y+60),(x-72,y+276),(x-288,y-84),(x-300,y-72),(x+288,y+60),(x+72,y+276), (x+288,y-84), (x+72,y-300)]
    l_agregation13 =[(x+72,y+348),(x+360,y+60),(x+360,y-84),(x+72,y-372),(x-72,y-372),(x+360,y-84),(x-360,y+60),(x-72,y+348)]
    l_agregation14 = [(x-72,y+420),(x-432,y+600),(x-432,y-84),(x-72,y-444),(x+72,y-444),(x+432,y-84),(x+432,y+60),(x+72,y+420)]
    l_agregation21 = [(x-288,y+60),(x-72,y+276),(x-288,y-84),(x-300,y-72),(x+288,y+60),(x+72,y+276), (x+288,y-84), (x+72,y-300)]
    l_agregation22 = [(x+360,y+72),(x+360,y-72),(x-360,y+72),(x-360,y-72),(x+72,y+360),(x+72,y-360),(x-72,y+360),(x-72,y-360)]
    l_agregation23 = [(x-72,y-432),(x-432,y-722),(x-432,y+72),(x-72,y+432),(x+72,y+432),(x+432,y+72),(x+432,y-72),(x+72,y-432)]
    l_agregation24 = [(x+72,y+504),(x+72,y-504),(x-72,y+504),(x-72,y-504),(x+504,y+72),(x+504,y-72),(x-504,y+72),(x-504,y-72)]
    l_agregation31 = [(x+72,y+348),(x+360,y+60),(x+360,y-84),(x+72,y-372),(x-72,y-372),(x+360,y-84),(x-360,y+60),(x-72,y+348)]
    l_agregation32 = [(x-72,y-432),(x-432,y-722),(x-432,y+72),(x-72,y+432),(x+72,y+432),(x+432,y+72),(x+432,y-72),(x+72,y-432)]
    l_agregation33 = [(x+504,y+72),(x+504,y-72),(x-504,y+72),(x-504,y-72),(x+72,y+504),(x+72,y-504),(x-72,y+504),(x-72,y-504)]
    l_agregation34 = [(x+72,y+576),(x+576,y+72),(x+576,y-72),(x+72,y-576),(x-72,y-576),(x-576,y-72),(x-576,y+72),(x-72,y+576)]
    l_agregation41 = [(x+72,y+576),(x+576,y+72),(x+576,y-72),(x+72,y-576),(x-72,y-576),(x-576,y-72),(x-576,y+72),(x-72,y+576),]
    l_agregation42 = [(x+72,y+504),(x+72,y-504),(x-72,y+504),(x-72,y-504),(x+504,y+72),(x+504,y-72),(x-504,y+72),(x-504,y-72)]
    l_agregation43 = [(x+72,y+576),(x+576,y+72),(x+576,y-72),(x+72,y-576),(x-72,y-576),(x-576,y-72),(x-576,y+72),(x-72,y+576)]
    l_agregation44 = [(x+648,y+72),(x+648,y-72),(x-648,y+72),(x-648,y-72),(x+72,y+648),(x+72,y-648),(x-72,y+648),(x-72,y-648)]"""
agregation4 ((0,0,0))
choix d’un des différents type d’agregation des pyramide